#include <iostream>
#include "Taskqueue.h"
using namespace std;

bool Taskqueue::empty(){
    return 0==_queue.size();
}
bool Taskqueue::full(){
    return _capacity==_queue.size();
}
int Taskqueue::pop(){
    //上锁
    unique_lock<mutex> _ul(_mutex);
    //判断是不是空的
    //如果是空的就等待
    while(empty()){
       _notempty.wait(_ul); 
    }
    //如果不是空的，就取出元素，同时唤醒生产者
       int number=_queue.front();
        _queue.pop();
       _notfull.notify_one();
       return number;
    //开锁
}
void Taskqueue::push(int value){
    //上锁
    unique_lock<mutex> _ul(_mutex);
    //判断是不是满的
    //如果是满的就等待
    while(full()){
        _notfull.wait(_ul);
    }
    //如果不是满的，就加入元素，改变条件变量
    
        _queue.push(value);
        _notempty.notify_one();
    
    //开锁
    
}
Taskqueue::Taskqueue(int capacity)
    :_capacity(capacity)
    ,_mutex()

{

}
